package com.lj.infoisland.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lj.infoisland.common.convention.result.Result;
import com.lj.infoisland.domain.dto.AdminUserInfo;
import com.lj.infoisland.domain.dto.LoginDTO;
import com.lj.infoisland.domain.dto.RegisterDTO;
import com.lj.infoisland.domain.dto.UserInitInfoDTO;
import com.lj.infoisland.domain.po.Users;
import com.lj.infoisland.domain.vo.UserInfoVO;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/*
 * @description 用户服务类
 * @author 龙洁
 * @create 2024-10-21 下午10:24
 */
public interface UsersService extends IService<Users> {
    /**
     * 登录
     *
     * @param loginDto 登录信息
     * @return 返回Token
     */
    Result<?> login(LoginDTO loginDto);

    /**
     * 注册
     *
     * @param registerDTO 注册信息
     * @return 返回Token
     */
    Result<?> register(RegisterDTO registerDTO);

    /**
     * 获取用户信息
     *
     * @param userUniqueId 用户唯一标识
     * @return 用户信息
     */
    Result<UserInfoVO> getUserInfo(String userUniqueId);

    Users getUserByUserUniqueId(String userUniqueId);

    /**
     * 修改用户信息
     *
     * @param userInfoVO 用户信息
     * @return void
     */
    Result<Void> alterUserInfo(UserInfoVO userInfoVO);

    /**
     * 修改用户手机号
     *
     * @param phoneNumber 手机号
     * @param code        验证码
     */
    Result<Void> alterPhoneNumber(String phoneNumber, String code);


    /**
     * 设置绑定验证码
     *
     * @param code 验证码
     */
    Result<?> setVerificationCode(String phoneNumber, String code);

    /**
     * 根据用户唯一标识获取用户名
     *
     * @param userUniqueId 用户唯一标识
     * @return 用户名
     */
    String getUserNameById(String userUniqueId);

    /**
     * 初始化用户信息
     *
     * @param userInitInfoDTO 用户信息
     * @return void
     */
    Result<?> initUserInfo(UserInitInfoDTO userInitInfoDTO);

    Integer getNewUsersCount();

    /**
     * 获取七天内每日新增
     * @param i
     * @return
     */
    Integer getWeekUserCount(int i);

    List<Users> getUserList(Integer pageNum, Integer pageSize,String username,String role);

    void addAdminUser(AdminUserInfo adminUserInfo);

    void updateUserStatus(String userUniqueId, Integer status);

    Long getUserTotal();
}
